package com.itheima.project.face;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.project.exception.ProjectException;
import com.itheima.project.vo.file.FileVo;
import com.itheima.project.vo.file.UploadMultipartFile;

import java.util.List;
import java.util.Set;

/**
 * @ClassName AffixFace.java
 * @Description 附件接口
 */
public interface FileFace {

    /***
     * @description 下载文件
     * @param fileId
     * @return
     */
    FileVo downLoad(Long fileId) throws ProjectException;

    /**
     * @Description 文件上传
     * @param multipartFile 上传对象
     * @param fileVo 附件对象
     * @return
     */
    FileVo upLoad(UploadMultipartFile multipartFile, FileVo fileVo) throws ProjectException;

    /**
     * @Description 为上传绑定对应的业务Id
     * @param  fileVo 附件对象
     * @return
     */
    List<FileVo> bindBusinessId(FileVo fileVo) throws ProjectException;

    /***
     * @description 移除业务原图片，并绑定新的图片到业务上
     * @param fileVo
     * @return
     */
    Boolean replaceBindBusinessId(FileVo fileVo);

    /***
     * @description 移除业务原图片，并批量绑定新的图片到业务上
     * @param fileVos
     * @return
     */
    Boolean replaceBindBatchBusinessId(List<FileVo> fileVos);

    /**
     * @Description 批量上传绑定对应的业务Id,注意只能是同一个业务附件上传
     * @param  fileVos 附件对象
     * @return
     */
    List<FileVo> bindBatchBusinessId(List<FileVo> fileVos) throws ProjectException;

    /**
     * @Description 按业务ID查询附件
     * @param  businessId 附件对象业务Id
     * @return
     */
    List<FileVo> findFileVoByBusinessId(Long businessId) throws ProjectException;

    /***
     * @description 批量删除文件
     *
     * @param checkedIds
     * @return
     * @return: java.lang.Boolean
     */
    Boolean deleteFileVo(String[] checkedIds) throws ProjectException;

    /**
     * @Description 删除业务相关附件
     * @param businessId 业务Id
     * @return
     */
    Boolean deleteFileVoByBusinessId(Long businessId) throws ProjectException;

    /**
     * @Description 文件列表
     * @param fileVo 查询条件
     * @return
     */
    Page<FileVo> findFileVoPage(FileVo fileVo, int pageNum, int pageSize) throws ProjectException;

    /***
     * @description 初始化所有businessId
     * @return: java.util.Set<java.lang.Long>
     */
    Set<Long> findBusinessIdAll();

}
